package com.hk.jdk21;

import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

/**
 * JDK 21 是一个LTS 版本，官网维护5年，虚拟线程在java 19中预览,在 JDK21中正式 转正
 *
 * @author Kevin
 * @date 2023-10-21 11:05
 */
public class VirtualThreadTest {

    public static void main(String[] args) {
        // 使用 Thread 方式创建并启动
        Thread.startVirtualThread(() -> System.out.println("threadName=" + Thread.currentThread().getName()));

        // 使用Executors 创建
        try (var executor = Executors.newThreadPerTaskExecutor(Thread.ofVirtual()
//                .name("virtual") // 固定虚拟线程名称
                .name("virtual-", 10) // 第一个参数:线程名称前缀，第二个参数：线程名称计数，从哪个数开始
                .factory())) {
            IntStream.range(0, 100_00).forEach(value -> executor.submit(() -> {
                try {
                    TimeUnit.SECONDS.sleep(1);
                    Thread thread = Thread.currentThread();
                    System.out.println("threadName=" + thread.getName() + ",threadId=" +
                            thread.threadId() + ",isVirtual=" + thread.isVirtual() + ",value=" + value);
                } catch (Exception e) {
                    System.err.println(e.getMessage());
                }
            }));
        }
    }
}
